JAXB (Java Architecture for XML Binding) এবং Jackson হলো দুটি আলাদা লাইব্রেরি, যেগুলো XML এবং JSON ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। অনেক সময় একই ডেটা মডেল থেকে XML এবং JSON উভয় ধরনের serialization/deserialization প্রয়োজন হয়। Jackson এবং JAXB-এর সমন্বয় করে এটি অর্জন করা যায়।
Jackson এবং JAXB-এর মধ্যে প্রধান পার্থক্য
| ফিচার | JAXB | Jackson |
|---|---|---|
| প্রাথমিক কাজ | XML ডেটা প্রক্রিয়াকরণ। | JSON ডেটা প্রক্রিয়াকরণ। |
| অ্যানোটেশন | JAXB-specific (@XmlElement, ইত্যাদি) | Jackson-specific (@JsonProperty)। |
| ডেটা ফরম্যাট | শুধুমাত্র XML। | JSON, XML, YAML, CSV। |
| Integration | JAXB annotations পড়তে পারে। | JAXB annotations এর জন্য সাপোর্ট প্রদান করে। |
JAXB এবং Jackson-এর ইন্টিগ্রেশন করার কারণ
- একই ডেটা মডেল থেকে XML এবং JSON উভয় serialization/deserialization পরিচালনা করা।
- কোড পুনর্ব্যবহারযোগ্যতা নিশ্চিত করা।
- JAXB annotations এর মাধ্যমে JSON এবং XML উভয় ডেটা ফরম্যাটের জন্য সমর্থন।
ইন্টিগ্রেশন প্রক্রিয়া
1. JAXB এবং Jackson ডিপেনডেন্সি যুক্ত করা
Maven ব্যবহার করলে আপনার pom.xml-এ নিচের ডিপেনডেন্সিগুলো যুক্ত করুন:
<dependencies>
<!-- Jackson Core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- Jackson Module for JAXB Annotations -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.15.2</version>
</dependency>
<!-- JAXB API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.2</version>
</dependency>
</dependencies>
2. JAXB Annotated Class তৈরি করা
একটি ডেটা মডেল ক্লাস তৈরি করুন এবং JAXB-specific annotations ব্যবহার করুন:
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Product {
private int id;
private String name;
private double price;
@XmlElement
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
3. Jackson ObjectMapper-এ JAXB Module যুক্ত করা
Jackson-এর সাথে JAXB annotations সমর্থন করতে হলে JaxbAnnotationModule যুক্ত করতে হবে।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
public class JacksonJAXBIntegrationExample {
public static void main(String[] args) throws Exception {
// ObjectMapper তৈরি
ObjectMapper objectMapper = new ObjectMapper();
// JAXB Module যুক্ত করা
objectMapper.registerModule(new JaxbAnnotationModule());
// Sample Data
Product product = new Product();
product.setId(1);
product.setName("Smartphone");
product.setPrice(699.99);
// JSON Serialization
String json = objectMapper.writeValueAsString(product);
System.out.println("JSON Output:");
System.out.println(json);
// JSON Deserialization
String jsonInput = """
{
"id": 2,
"name": "Laptop",
"price": 999.99
}
""";
Product deserializedProduct = objectMapper.readValue(jsonInput, Product.class);
System.out.println("Deserialized Product:");
System.out.println("ID: " + deserializedProduct.getId());
System.out.println("Name: " + deserializedProduct.getName());
System.out.println("Price: " + deserializedProduct.getPrice());
}
}
আউটপুট:
JSON Output:
{"id":1,"name":"Smartphone","price":699.99}
Deserialized Product:
ID: 2
Name: Laptop
Price: 999.99
XML এবং JSON উভয় ফরম্যাটে Serialization/Deserialization
JAXB দিয়ে XML Serialization/Deserialization
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
public class JAXBExample {
public static void main(String[] args) throws JAXBException {
Product product = new Product();
product.setId(1);
product.setName("Smartphone");
product.setPrice(699.99);
// JAXB Context তৈরি
JAXBContext context = JAXBContext.newInstance(Product.class);
// XML Serialization
StringWriter writer = new StringWriter();
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(product, writer);
String xml = writer.toString();
System.out.println("XML Output:");
System.out.println(xml);
// XML Deserialization
StringReader reader = new StringReader(xml);
Unmarshaller unmarshaller = context.createUnmarshaller();
Product deserializedProduct = (Product) unmarshaller.unmarshal(reader);
System.out.println("Deserialized Product:");
System.out.println("ID: " + deserializedProduct.getId());
System.out.println("Name: " + deserializedProduct.getName());
System.out.println("Price: " + deserializedProduct.getPrice());
}
}
আউটপুট:
XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product>
<id>1</id>
<name>Smartphone</name>
<price>699.99</price>
</product>
Deserialized Product:
ID: 1
Name: Smartphone
Price: 699.99
JSON এবং XML উভয়ের জন্য একই মডেল ব্যবহার
JAXB এবং Jackson ইন্টিগ্রেশন করলে একই মডেল থেকে JSON এবং XML উভয় ফরম্যাট তৈরি করা সম্ভব।
উদাহরণ:
public class CombinedExample {
public static void main(String[] args) throws Exception {
Product product = new Product();
product.setId(1);
product.setName("Smartphone");
product.setPrice(699.99);
// JAXB দিয়ে XML Serialization
JAXBContext context = JAXBContext.newInstance(Product.class);
StringWriter writer = new StringWriter();
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(product, writer);
System.out.println("XML Output:");
System.out.println(writer.toString());
// Jackson দিয়ে JSON Serialization
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JaxbAnnotationModule());
String json = objectMapper.writeValueAsString(product);
System.out.println("JSON Output:");
System.out.println(json);
}
}
আউটপুট:
XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product>
<id>1</id>
<name>Smartphone</name>
<price>699.99</price>
</product>
JSON Output:
{"id":1,"name":"Smartphone","price":699.99}
- JAXB এবং Jackson ইন্টিগ্রেশন ব্যবহার করে JSON এবং XML উভয় serialization/deserialization সহজে করা যায়।
- একই মডেল থেকে দুই ফরম্যাট তৈরি করা গেলে কোড পুনর্ব্যবহারযোগ্য এবং সংক্ষিপ্ত হয়।
JaxbAnnotationModuleJackson ObjectMapper-কে JAXB annotations পড়তে সক্ষম করে।- XML এবং JSON উভয় প্রয়োজন হলে, JAXB এবং Jackson একত্রে একটি কার্যকর সমাধান।
Read more